#include <vector>
#include <iostream>

using namespace std;

int main(int argc, char const *argv[])
{
  /* code */
  vector<int> empty; // 空整数数组
  vector<int> array {5, 4, 1, 3, 2}; // 按字面量设置数组
  vector<int> ones(100, 1); // 按默认值设置数组

  /*
    [
      [1, 1, 1],
      [2, 2, 2],
      [3, 3, 3]
    ]
  */

  vector<vector<int>> matrix {
    {1, 1, 1},
    {2, 2, 2},
    {3, 3, 3}
  };


  /*
  for i in 0..<array.count {
    print(array[i])
  }
  */
  
  // C++ 简易循环
  for (int n : array) {
    cout << n << " ";
  }
  cout << endl;

  // C++ 传统循环
  // for (初始循环变量 ; 循环条件; 每一轮循环之后，对循环变量的操作)
  for (int i = 0; i < array.size(); ++i) {
    // i: 0 ~ array.size() - 1
    cout << array[i] << " ";
  }
  cout << endl;

  // C++ 传统循环，打印 array 中所有的偶数
  array.push_back(10);

  // vector 的迭代器
  // {1, 2, 3, 4, 5}
  // 1. 数字表达每一个元素的位置的，从传统的 C 语言继承而来的
  // 2. 数组中每一个元素的位置，是通过一个特定的类型来表达的，这个类型叫迭代器。
  // 创建一个表达数组中元素位置的类型
  vector<int>::iterator pos = array.begin();
  cout << "First number: " << *pos << endl;

  auto end = array.end(); // 最后一个元素的下一个位置
  cout << "Last number: " << *(end - 1) << endl;

  sort(array.begin(), array.end());

  vector<int>::iterator pos1 = array.begin();
  
  for (; pos1 != array.end(); ++pos1) {
    cout << *pos1 << endl;
  }

  for (int n : array) {
    cout << n << "";
  }
  cout << endl;

  // var arr: [Int] = [1, 2, 3, 4]
  // arr.startIndex 起始位置
  // arr.endIndex   最后一个元素的下一个位置

  return 0;
}
